package leetcode;

class Solution1 {
    /**
     * 91. 解码方法
     * https://leetcode.cn/problems/decode-ways/description/
     * @param ss
     * @return
     */
    public int numDecodings(String ss) {
        //求出字符的长度
        int len = ss.length();
        //把字符串转为字符数组
        char[] s = ss.toCharArray();
        int[] dp = new int[len];
        //初始化dp表
        if(s[0] != '0') dp[0] = 1;
        if(len == 1) return dp[0];//处理边界情况

        if(s[0] != '0' && s[1] != '0') dp[1] += 1;
        //求出0和1下标组合数字是否在范围里 10 <= n <= 26
        int t = (s[0] - '0') * 10 + (s[1] - '0');
        if(t >= 10 && t <= 26) dp[1] += 1;

        //遍历dp表
        for(int i = 2; i < len; i++) {
            //分情况，也是初始化的情况
            if(s[i] != '0') dp[i] += dp[i - 1];
            int tt = (s[i - 1] - '0') * 10 + (s[i] - '0');
            if(tt >= 10 && tt <= 26) dp[i] += dp[i - 2];
        }
        return dp[len - 1];
    }
}